#pragma once
#include "lineinterpolation.h"
#include "Point3D.h"

class BresehamLine3D :
	public LineInterpolation
{
private:
	void clamp(UINT machineWidth,UINT machineHeight,vector<ConfigurationState*> *& states);
	void updateNeighbourhood(UINT machineWidth,UINT machineHeight,bool steep,MY_DATATYPE x,MY_DATATYPE y,MY_DATATYPE z, MY_DATATYPE stepX,MY_DATATYPE stepY,MY_DATATYPE stepZ,int & instructionNumber,vector<Point3D> *& neighbourhood, vector<ConfigurationState*> *& states);
	void checkMilliingError(MillingMachine3C * machine,MillingTool * tool,int & instructionNumber,ErrorInfo ** millingErrorData,vector<Point3D> *& neighbourhood, vector<ConfigurationState*> *& states);
public:
	BresehamLine3D(ConfigurationState * _previous,ConfigurationState * _current);
	void perform(MillingMachine3C * machine,MillingTool * tool, vector<ConfigurationState*> *& states,ErrorInfo ** millingErrorData);
	~BresehamLine3D(void);
};

